In computer science, a virtual machine (VM) is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of an actual physical computer system. Each VM may function as a self-contained platform, running its own operating system (OS) and software applications (processes). Typically, a virtual machine monitor (VMM) manages allocation and virtualization of computer resources and performs context switching, as may be necessary, to cycle between various VMs.
A host machine (e.g., computer or server) is typically enabled to simultaneously run multiple VMs, where each VM may be used by a local or remote client. The host machine allocates a certain amount of the host's resources to each of the VMs. Each VM is then able to use the allocated resources to execute applications, including operating systems known as guest operating systems. The VMM virtualizes the underlying hardware of the host machine or emulates hardware devices, making the use of the VM transparent to the guest operating system or the remote client that uses the VM.
One goal of the above-described virtualization systems is to reduce power consumption in the system with a power saving strategy. Currently, there are two mechanisms to control power consumption in a virtualization system: (1) a macro-level power saving policy implemented by a central manager such as a host controller, and (2) a micro-level power saving policy implemented by each host machine. The macro-level power saving policy includes a central manager trying to consolidate workload on a small number of host machines, so that other host machines can be shutdown. One example of a macro-level power saving scheduling policy is to reduce power utilization by consolidating the workload on a small number of host machines and shutting down host machines that are not used in order to reduce overall power consumption. The central manager is usually slower in making changes (e.g., minutes), as it responds to trends.
The micro-level power saving policy is implemented at a local host machine scheduler, which shuts down unused local resources (e.g., CPU cores) in order to save power one each individual host machine. The local manager is usually faster in responding to changes (e.g., seconds and less) than a central manager of the macro-level power saving policy.
However, there can be more to a power saving policy than shutting down a single host machine. Some power saving policies include the ability to shut down individual components of a host machine, rather than the host machine itself. For example, a power saving policy can shut down CPU cores, network interface cards (NICs), and so on. This is where a micro-level power saving policy comes in, which can throttle power within a single host machine by shutting down individual components within the machine. Unfortunately, there is no collaboration between macro-level power saving policies and micro-level power saving policies. This can lead to inefficiencies in overall power consumption in a virtualization system.